home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / Boxer / TZUtils / stringil.h < prev    next >
Text File  |  2000-06-23  |  3KB  |  142 lines

  1.  
  2. /* linux (posix?) says val should be an int */
  3. //#include <string.h>
  4. #define VALT int
  5. #define SIZET size_t
  6.  
  7. extern inline void *memset(void *dst, VALT val, SIZET num)
  8. {
  9.   register void *ds = dst;
  10.   while (num--)
  11.     *((char *) dst)++ = val;
  12.   return ds;
  13. }
  14.  
  15. extern inline void *memcpy(void *dst, const void *src, SIZET num)
  16. {
  17.   register void *ds = dst;
  18.   while (num--)
  19.     *((char *) dst)++ = *((char *) src)++;
  20.   return ds;
  21. }
  22.  
  23. extern inline int memcmp(void *dst, const void *src, SIZET num)
  24. {
  25.  
  26.   while (num-- && (*((char *) dst)++ == *((char *) src)++));
  27.   if (num >= 0)
  28.     return *--((char *) dst) - *--((char *) src);
  29.   else
  30.     return 0;
  31. }
  32.  
  33. extern inline void *memccpy(void *dst, const void *src, int c, SIZET num)
  34. {
  35.   register void *ds = dst;
  36.   while (num-- && *((char *) src) != c)
  37.     *((char *) dst)++ = *((char *) src)++;
  38.   if (num >= 0)
  39.     *((char *) dst)++ = *((char *) src)++;
  40.   return ds;
  41. }
  42.  
  43. extern inline void *memmove(void *dst, const void *src, SIZET num)
  44. {
  45.   register void *ds = dst;
  46.   if (dst < src || dst >= src + num)
  47.     while (num--)
  48.       *((char *) dst)++ = *((char *) src)++;
  49.   else {
  50.     dst += num;
  51.     src += num;
  52.     while (num--)
  53.       *--((char *) dst) = *--((char *) src);
  54.   }
  55.   return ds;
  56. }
  57.  
  58. extern inline SIZET strlen(char *dst)
  59. {
  60.   register SIZET num = 0;
  61.   while ((*dst++))
  62.     num++;
  63.   return num;
  64. }
  65.  
  66. extern inline char *strcat(char *dst, const char *src)
  67. {
  68.   register char *ds = dst;
  69.   while (*dst)
  70.     dst++;
  71.   while ((*dst++ = *src++));
  72.   return ds;
  73. }
  74.  
  75. extern inline char *strncat(char *dst, const char *src, SIZET num)
  76. {
  77.   register char *ds = dst;
  78.   while (*dst)
  79.     dst++;
  80.   while (num-- && (*dst++ = *src++));
  81.   return ds;
  82. }
  83.  
  84. extern inline char *strcpy(char *dst, const char *src)
  85. {
  86.   register char *ds = dst;
  87.   while ((*dst++ = *src++));
  88.   return ds;
  89. }
  90.  
  91. extern inline int strcmp(const char *dst, const char *src)
  92. {
  93.   while (*dst && *src && (*dst++ == *src++));
  94.   if (*dst && *src)
  95.     return *--src - *--dst;
  96.   else
  97.     return *src - *dst;
  98. }
  99.  
  100. extern inline int strncmp(const char *dst, const char *src, SIZET num)
  101. {
  102.   while (num && *dst && *src && (*dst++ == *src++))
  103.     num--;
  104.   if( !num )
  105.     return 0;
  106.   if (*dst && *src)
  107.     return *--src - *--dst;
  108.   else
  109.     return *src - *dst;
  110. }
  111.  
  112. extern inline char *strncpy(char *dst, const char *src, SIZET num)
  113. {
  114.   register char *ds = dst;
  115.   while (num-- && (*dst++ = *src++));
  116.   if (num >= 0)
  117.     while (num--)
  118.       *dst++ = 0;
  119.   return ds;
  120. }
  121.  
  122. extern inline void *memchr(const void *dst, VALT val, SIZET num)
  123. {
  124.   char *dstl = (void *)dst;
  125.   while (num-- && *dstl++ != val);
  126.   if (num >= 0)
  127.     return (void *) --dstl;
  128.   else
  129.     return NULL;
  130. }
  131.  
  132. extern inline char *strchr(const char *dst, int val)
  133. {
  134.   char *dstl = (char *)dst;
  135.   while (*dstl && *dstl != val)
  136.     dstl++;
  137.   if (*dstl != val)
  138.     return NULL;
  139.   else
  140.     return dstl;
  141. }
  142.